//顺序表
//顺序表的类型定义
template <typename E,int MAXSIZE>
struct Sqlist  {
    E elem[MAXSIZE];
    int length;
};
//初始化空表
template <typename E,int M> 
void InitList(Sqlist<E,M> &L)
{
    L.length=0;
}
//求表长
//在顺序表L中第i个位置插入元素e
template <typename E,int MAXSIZE>
void ListInsert(Sqlist<E,MAXSIZE> &L,int i,E e)
{
    //若表满则不能插入
    if (L.length == MAXSIZE)  throw "List if full";
    //若插入位置不合法则不能插入
    if (i<1 || i>L.length+1)  throw "i out of range";
    //元素移动
    for (int j=L.length-1;j>=i-1;j--)
        L.elem[j+1]=L.elem[j];
    L.elem[i-1]=e;
    L.length++;

}
//删除顺序表L中的第i个位置的元素e
template <typename E,int MAXSIZE>
void ListDelete(Sqlist<E,MAXSIZE> &L,int i,E &e)
{
    //若表空则不能删除
    if (L.length == 0)  throw "List is empty";
    //若i的位置不合法不能删除
    if (i<1 || i>L.length)  throw "i out of range";
    //首先把这个元素取出来
    e=L.elem[i-1];
    //移动元素，每个元素都向前移动
    for (int j=i;j<L.length;j++)
    L.elem[j-1]=L.elem[j];
    //表长减一
    L.length--;
}